package com.qiaoba.module.system.service;

import cn.hutool.core.lang.tree.Tree;
import com.qiaoba.module.system.entity.SysDept;
import com.qiaoba.module.system.entity.dto.SysDeptDTO;
import com.qiaoba.module.system.entity.param.SysDeptParam;

import java.util.List;

/**
 * 部门 服务层
 *
 * @author ailanyin
 * @date 2023-09-10 22:05:45
 */
public interface SysDeptService {

    /**
     * 新增部门
     *
     * @param dto 部门
     * @return 结果
     */
    int insert(SysDeptDTO dto);

    /**
     * 修改部门
     *
     * @param dto 部门
     * @return 结果
     */
    int updateById(SysDeptDTO dto);

    /**
     * 删除部门
     *
     * @param deptId 部门ID
     * @return 结果
     */
    int deleteById(String deptId);

    /**
     * 查询详细
     *
     * @param deptId 部门Id
     * @return 部门信息
     */
    SysDept selectById(String deptId);

    /**
     * 查询列表
     *
     * @param param 条件
     * @return 部门列表
     */
    List<SysDept> selectList(SysDeptParam param);

    /**
     * 查询部门列表(排除节点)
     *
     * @param deptId deptId
     * @return list
     */
    List<SysDept> excludeChild(String deptId);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param list 部门列表
     * @return 下拉树结构列表
     */
    List<Tree<String>> buildDeptTree(List<SysDept> list);

    /**
     * 根据角色ID查询部门树信息
     *
     * @param roleId 角色ID
     * @return 选中部门列表
     */
    List<String> selectDeptIdsByRoleId(String roleId);
}
